iT邦幫忙

2024 iThome 鐵人賽

DAY 6
0
AI/ ML & Data

使用 jq 處理資料系列 第 6

Day6: 處理本地端 JSON 檔案

  • 分享至 

  • xImage
  •  

前面我們學到如何以 jq filter 取得 JSON 物件裡的屬性,今天來討論幾個練習小技巧吧!

對話中學習

徒弟:師傅,為什麼在我的命令提示字元裡,每次執行 curl 都會看到 "% Total" 這樣的資訊?有辦法不顯示這個嗎?

師傅:哈哈,你終於開始關注細節了!這就像廚師開始注意調味一樣,是個好現象。

徒弟:謝謝師傅。那麼,這個 "% Total" 是什麼意思呢?

師傅:這是 curl 在告訴你下載進度,就像跑馬拉松時的里程標記。但有時候,我們不需要知道每一步,只想要最後的結果。

徒弟:原來如此。那麼,有辦法讓 curl 不顯示這些資訊嗎?

師傅:當然有!你可以使用 -s 或 --silent 選項。就像忍者一樣,悄無聲息地完成任務。

徒弟:哦,那麼命令應該是這樣嗎:curl -s https://jsonplaceholder.typicode.com/todos/1

師傅:沒錯!你學得真快,像閃電一樣。現在你的 curl 命令就會安安靜靜了。

徒弟:謝謝師傅!不過,我還有一個問題......我們一直用 curl 從網上提取資料,這樣會不會佔用太多別人的網路資源呢?有沒有什麼方法可以存取本地的 JSON 呢?

師傅:哈!終於開始為他人著想了!不錯,這個問題問得好,像顆閃亮的珍珠。

徒弟:謝謝師傅。那麼,有什麼解決方法嗎?

師傅:當然有!我們可以把 JSON 存在本地文件裡,就像把珍寶藏在自己家裡。

徒弟:哦,那要怎麼做呢?

師傅:很簡單。首先,我們用 curl 把資料存到文件裡:curl https://jsonplaceholder.typicode.com/todos/1 > todo.json

徒弟:這樣就把資料存到了 todo.json 文件裡?

師傅:沒錯!然後我們就可以用 jq 直接處理這個文件了:jq "." todo.json

徒弟:哇,這樣就不用每次都從網上抓資料了!

師傅:對,你終於開竅了!這樣既省資源,又能快速操作,簡直是一舉兩得。

徒弟:太棒了!那我可以用這種方法來練習各種 jq 操作嗎?

師傅:當然可以!你現在就像一隻學會飛翔的小鳥,可以自由探索 JSON 的世界了


curl 關閉進度顯示

curl 命令中的 -s 選項(或 --silent)的作用是讓 curl 在執行時不顯示進度條或錯誤訊息。這對於編寫腳本或在需要乾淨的輸出的情況下特別有用。它就像是讓 curl 悄悄地完成任務,不發出任何聲響。

如果不想看到進度顯示,卻不想錯過錯誤訊息,可以參考以下指令:

curl --show-error --silent https://example.com

> 輸出文件

另外,使用 > 符號,能將輸出重定向到文件。這個符號告訴系統將命令的輸出不是顯示在畫面上,而是寫入到指定的文件中。例如,curl https://jsonplaceholder.typicode.com/todos/1 > todo.json 會將 TODO 的內容保存到 todo.json 文件中,而不是直接顯示在命定提示字元畫面上。

jq 處理本地 json 檔案

前面的練習都是透過 curl 取得 json 檔案,如:

curl https://jsonplaceholder.typicode.com/todos/1 | jq ".title"

在當我們將json儲存到本地端的檔案中之後,也一樣可以使用 jq filter,做法非常類似。使用 jq "filter" 檔案的基本語法是 jq "filter" file.json。這裡的 "filter" 和昨天介紹的相同的 jq 表達式,可用於選擇、轉換或操作 JSON 資料。

例如以下指令,會從 todo.json 文件中提取 "title" 屬性的值。

jq ".title" todo.json

實際練習結果可參考下圖:
https://ithelp.ithome.com.tw/upload/images/20240920/20078389wjASOjGuAp.png

結論

我第一次接觸 jq 的時候,是看到 curl + jq 的組合。隨著練習的次數增加,也看到了可以操作 json 檔案的做法,這種做法對於練習而言會是更好的體驗,更放心的練習 jq。 感謝今天認真練習的自己,期待明天的學習~ ✨😁


上一篇
Day5: 使用 jq filter 取得 JSON 物件屬性值
下一篇
Day7: 使用 jq filter 處理 JSON 陣列
系列文
使用 jq 處理資料30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言